/**
 * 交换两个变量的值 无解
 * @param {*} a 变量1
 * @param {*} b 变量2
 */
/* const n1 = 1,
  n2 = 2;
function swap(a, b) {
  // 只能交换函数内部的变量
  const temp = a;
  a = b;
  b = temp;
}

swap(n1, n2);
console.log(n1, n2); */

/**
 * 交换对象两个属性的值
 * @param {Object} obj 对象
 * @param {string} key1 属性名1
 * @param {string} key2 属性名2
 */
function swap(obj, key1, key2) {
  const temp = obj[key1];
  obj[key1] = obj[key2];
  obj[key2] = temp;
}

/* const obj = {
  n1: 1,
  n2: 2,
};
swap(obj, "n1", "n2");
console.log(obj);

const arr = [1, 2, 3, 4, 5];
swap(arr, 1, 2);
console.log(arr); */

/**
 * 修改对象，仅保留需要的属性
 * @param {Object} obj 要修改的对象
 * @param {Array<string>} keys 需要保存的属性名数组
 */
function pick(obj, keys) {
  // 对函数内部的形参赋值就会和外界无关
  for (const key in obj) {
    if (!keys.includes(key)) {
      delete obj[key];
    }
  }
}

const obj = {
  a: 1,
  b: 2,
  c: 3,
  d: 4,
};

pick(obj, ["a", "c"]);
console.log(obj);
